package com.modi.breaks;

import javax.swing.JButton;
import javax.swing.JTabbedPane;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JComponent;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.util.List;

public class MainTabbedPane extends JPanel {
	public MainTabbedPane() {
		super(new GridLayout(1, 1));

		JTabbedPane tabbedPane = new JTabbedPane();
		ImageIcon icon = createImageIcon("images/middle.gif");

		JComponent panel1 = makeMainPanel();
		tabbedPane.addTab("Main", icon, panel1,
				"Main window to start/stop break scheduler.");
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_1);

		JComponent panel2 = makeHistoryPanel();
		tabbedPane.addTab("History", icon, panel2,
				"Display the history of break taken.");
		tabbedPane.setMnemonicAt(1, KeyEvent.VK_2);

		JComponent panel3 = makeTextPanel("Panel #3");
		tabbedPane.addTab("Tab 3", icon, panel3, "Still does nothing");
		tabbedPane.setMnemonicAt(2, KeyEvent.VK_3);

		JComponent panel4 = makeTextPanel("Panel #4 (has a preferred size of 410 x 50).");
		panel4.setPreferredSize(new Dimension(410, 50));
		tabbedPane.addTab("Tab 4", icon, panel4, "Does nothing at all");
		tabbedPane.setMnemonicAt(3, KeyEvent.VK_4);

		// Add the tabbed pane to this panel.
		add(tabbedPane);

		// The following line enables to use scrolling tabs.
		tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
	}

	private JComponent makeHistoryPanel() {
		final JPanel panel = new JPanel(false);
		
		
		final JButton showButton = new JButton("Show");
		
		showButton.setBounds(50, 60, 80, 30);
		showButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				panel.remove(1);
				
				List<String> list = Main.breakTime;
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				list.add("aaaaa");
				
				JPanel dataPanel = new JPanel(new GridLayout(0, 2));
				dataPanel.add(new JLabel("Start Time"));
				dataPanel.add(new JLabel("End Time"));

				for (String time : Main.breakTime) {
					dataPanel.add(new JLabel(time));
				}
				
				panel.add(dataPanel);
			}
		});
		
		panel.add(showButton);
		return panel;
	}

	private JComponent makeMainPanel() {
		JPanel panel = new JPanel(false);
		final JButton stopButton = new JButton("Stop");
		final JButton startButton = new JButton("Start");
		startButton.setBounds(50, 60, 80, 30);
		startButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				startButton.setEnabled(false);
				stopButton.setEnabled(true);
				System.out.println("startButton---------" + DateUtils.now());
				StretchScheduler scheduler = new StretchScheduler();
				scheduler.startTheScheduler();
				Main.scheduler = scheduler;

			}
		});

		stopButton.setEnabled(false);
		stopButton.setBounds(70, 80, 100, 50);
		stopButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {
				stopButton.setEnabled(false);
				startButton.setEnabled(true);
				System.out.println("stopbutton---------" + DateUtils.now());
				if (null != Main.scheduler) {
					Main.scheduler.stopTheScheduler();
				}

			}
		});

		panel.add(startButton);
		panel.add(stopButton);
		return panel;
	}

	protected JComponent makeTextPanel(String text) {
		JPanel panel = new JPanel(false);
		JLabel filler = new JLabel(text);
		filler.setHorizontalAlignment(JLabel.CENTER);
		panel.setLayout(new GridLayout(1, 1));
		panel.add(filler);
		return panel;
	}

	/** Returns an ImageIcon, or null if the path was invalid. */
	protected static ImageIcon createImageIcon(String path) {
		java.net.URL imgURL = MainTabbedPane.class.getResource(path);
		if (imgURL != null) {
			return new ImageIcon(imgURL);
		} else {
			System.err.println("Couldn't find file: " + path);
			return null;
		}
	}

	/**
	 * Create the GUI and show it. For thread safety, this method should be
	 * invoked from the event dispatch thread.
	 */
	private static void createAndShowGUI() {
		// Create and set up the window.
		JFrame frame = new JFrame("TabbedPaneDemo");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		// Add content to the window.
		frame.add(new MainTabbedPane(), BorderLayout.CENTER);

		// Display the window.
		frame.pack();
		frame.setVisible(true);
	}

	public static void main(String[] args) {
		// Schedule a job for the event dispatch thread:
		// creating and showing this application's GUI.
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				// Turn off metal's use of bold fonts
				UIManager.put("swing.boldMetal", Boolean.FALSE);
				createAndShowGUI();
			}
		});
	}
}